package org.goj.practice.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.goj.common.entity.practice.Contest;
import org.goj.practice.vo.ContestAdminVO;
import org.goj.practice.vo.ContestRankVO;
import org.goj.practice.vo.ContestVO;

import java.text.ParseException;
import java.util.List;

/**
 * <p>
 * 竞赛表 服务类
 * </p>
 *
 * @author CK
 * @since 2020-12-02
 */
public interface ContestService extends IService<Contest> {

    /**
     * 管理员查询竞赛列表
     *
     * @param current 当前页
     * @param size    页面大小
     * @param sort    排序规则
     * @param name    搜索名称
     * @return Page<Contest>
     * @author CK
     * @date 2021/4/19 15:53
     */
    Page<Contest> contestListAdmin(Integer current, Integer size, Integer sort, String name);


    void addContest(Integer contestId, Integer userId, String title, List<Integer> problemIds, String startDateTime, String endDateTime, String description, Boolean defunct, List<Integer> languages, Integer privilege, String password, String numbers) throws ParseException;

    /**
     * 根据ID查询竞赛详情
     *
     * @param contestId 竞赛ID
     * @return ContestAdminVO
     * @author CK
     * @date 2021/4/20 19:48
     */
    ContestAdminVO contestAdminById(Integer contestId);

    /**
     * 用户条件查询竞赛列表
     *
     * @param current           当前页
     * @param size              分页大小
     * @param userId            用户ID
     * @param name              查询标题
     * @param selectStatusValue 权限
     * @param selectClassValue  分类状态
     * @return Page<ContestVO>
     * @author CK
     * @date 2021/4/21 10:51
     */
    Page<ContestVO> pageContest(Integer current, Integer size, Integer userId, String name, Integer selectStatusValue, Integer selectClassValue);

    /**
     * 查询竞赛的排名
     *
     * @param contestId 竞赛ID
     * @return ContestRankVO
     * @author CK
     * @date 2021/4/25 11:36
     */
    ContestRankVO contestRank(Integer contestId);
}
